Applicative Style
Applicative Functorを用いて関数適用を行うこと
こういう形式の書き方を「Applicative Style」と呼ぶ
pure f <*> m1 <*> m2
code:hs
pure f <*> m1 <*> m2
<*>を連続して使う
f <$> m1 <*> m2
code:hs
f <$> m1 <*> m2
最初だけ<$>を使う
理解する際は、前者を見たほうがわかりやすいmrsekut.icon
実際に書く際は、前者の省略版のような形で、後者を使うことが多いmrsekut.icon
関数適用の一般化と捉える
通常の関数適用
f a b c
のApplicative版として
fa <*> ma <*> mb <*> mc
のように書ける
<*>はapplyのエイリアスで、関数をapplyしてる、と読めば意味がわかりやすい
do式を使った書き換え
Applicativeの話なので、Monad (do)は関係ないが、Monadに慣れた人からするとわかりやすいかも知れない
code:hs
foo = do
a <- m1
b <- m2
return $ f a b
Applicative Styleの練習
ApplicativeDo
参考
Applicativeのススメ - あどけない話
『Applicative Programming with Effects』
https://www.staff.city.ac.uk/~ross/papers/Applicative.html
applicativeの論文
[| f x1 x2 ... |]
applicative styleの糖衣構文
Monoidal型クラス
https://mizunashi-mana.github.io/blog/posts/2019/04/generalizing-transformation/#applicative
https://aratama.github.io/purescript/chapter07.html 7.3, 7.4
実用例など
最初の例を実践するためには、Applicativeにする必要はなく、Applyで十分であることがわかるmrsekut.icon